package com.koron.common.task.web.service;

import com.koron.common.task.web.entity.CronTask;
import com.koron.common.task.web.entity.XxlJobInfo;

import java.util.List;

/**
 * @author twcao
 * @title: JobService
 * @projectName GDH_EAM_V2
 * @description: job service
 * @date 2021/9/317:47
 */
public interface XxlJobService {

    /**
     * 根据业务id获取CronTask
     * @param bizId 业务id
     * @return
     */
    CronTask getCronTaskById(String bizId);

    /**
     * 根据xxl-jobid查询任务
     * @param xxlJobId
     * @return
     */
    CronTask getCronTaskByXxlJobId(Integer xxlJobId);

    /**
     * 根据任务id查询xxl-job详情
     * @param jobId
     * @return
     */
    XxlJobInfo getXxlJobInfoById(Integer jobId);

    /**
     * 新增任务
     * @param jobInfo
     * @return
     */
    Integer add(XxlJobInfo jobInfo, CronTask cronTask);

    /**
     * 新增简单任务
     * @param bizId 业务id
     * @param cron cron表达式
     * @param mark 数据源标识
     * @param jobRemark job描述
     * @param author 任务归属人
     * @param xxlJobVal @XxlJob 注解的value值
     * @param timeOut 任务超时时间，单位秒, 根据实际执行的业务代码， 设置合理的超时时间
     * @return
     */
    Integer addSimpleJob(String bizId, String cron, String mark, String jobRemark, String author, String xxlJobVal, int timeOut);

    /**
     * 新增简单任务
     * @param bizId 业务id
     * @param cron cron表达式
     * @param mark 数据源标识
     * @param jobRemark job描述
     * @param author 任务归属人
     * @param xxlJobVal @XxlJob 注解的value值
     * @return
     */
    boolean update(String bizId, String cron, String mark, String jobRemark, String author, String xxlJobVal);

    /**
     * 移除任务
     * @param bizId
     * @return
     */
    boolean remove(String bizId);

    /**
     * 停止任务
     * @param bizId
     * @return
     */
    boolean pause(String bizId);

    /**
     * 开始任务
     * @param bizId
     * @return
     */
    boolean start(String bizId);

    /**
     * 获取后面几次的运行时间
     * @param scheduleConf cron表达式
     * @param scheduleType 类型
     * @param triggerTime 默认5次
     * @return
     */
    List<String> nextTriggerTime(String scheduleType, String scheduleConf, Integer triggerTime);

    /**
     * 获取后面几次的运行时间
     * @param scheduleConf cron表达式
     * @param triggerTime 默认5次
     * @return
     */
    List<String> nextTriggerTime(String scheduleConf, Integer triggerTime);
}
